
Function.prototype.bind1 = function () {
  // 将参数拆解为数组
  // const args = Array.prototype.slice.call(arguments);
  const args = Array.from(arguments);
  console.log(arguments, args)

  // 获取 this 
  const t = args.shift();

  // fn1.bind(...)  中的  fn1
  const self = this;

  return function() {
    return self.apply(t, args)
  }
}

function fn1(a, b, c) {
  console.log('this', this);
  console.log(a, b, c);
  return 'this is fn1'
}

const fn2 = fn1.bind1({ x: 100 }, 10, 20, 30);
const res = fn2();
console.log(res)